package com.baidu.acg.industry.bigdata.model;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.ToString;

import java.math.BigDecimal;
import java.util.List;

@Data
@AllArgsConstructor
@Builder
@ToString
public class ModelTrainRequest {

    /**
     * 任务ID（唯一标识）
     */
    private String taskId;

    /**
     * 模型训练集比例 (例如 "0.8")
     */
    private String baseProportionTrain;

    /**
     * 模型测试集比例 (例如 "0.2")
     */
    private String baseProportionTest;

    /**
     * 训练轮次
     */
    private String trainCount;

    /**
     * 验证频率
     */
    private String verifFreq;

    /**
     * 数据点bin文件路径列表
     */
    private List<String> trainPointBinPath;

    /**
     * STL文件路径列表
     */
    private List<String> trainStlPath;

    /**
     * 训练集文件夹路径列表
     */
    private List<String> trainDataDir;

    /**
     * 训练快照文件路径列表
     */
    private List<String> trainSnapshotsPath;

    /**
     * 训练场景异常CSV路径列表
     */
    private List<String> trainScenarioExcCsvPath;

    /**
     * 训练场景输出CSV路径列表
     */
    private List<String> trainScenarioOutCsvPath;

    /**
     * 存储的bin文件
     */
    private List<String> evalPointsBinPath;

    /**
     * 存储的stl文件
     */
    private List<String> evalStlPath;

    /**
     * 测试集文件夹路径列表
     */
    private List<String> evalDataDir;

    /**
     * 测试快照文件路径列表
     */
    private List<String> evalSnapshotsPath;

    /**
     * 测试场景异常CSV路径列表
     */
    private List<String> evalScenarioExcCsvPath;

    /**
     * 测试场景输出CSV路径列表
     */
    private List<String> evalScenarioOutCsvPath;

    /**
     * 学习率
     */
    private Double trainLrSchedulerLearningRate;

    private String modelDatasetType;

    /**
     * 模型运行所在资源
     */
    private String cudaVisbleDevices;






    /**
     * 日志打印间隔
     */
    private Integer logFreq;
    /**
     * 数据加载线程
     */
    private Integer numWorkers;
    /**
     * 长方体网格分辨率
     */
    private String sdfSpatialResolution;
    /**
     * 工况是否进行缩放
     */
    private Integer applyLog;
    /**
     * GN01搜索半径
     */
    private BigDecimal radiusIn;
    /**
     * GN02搜索半径
     */
    private BigDecimal radiusOut;
    /**
     * 工况特征通道数
     */
    private Integer embedDim;
    /**
     * GNO输出通道数
     */
    private String hiddenChannels;
    /**
     * FNO分辨率
     */
    private String fnoModes;
    /**
     * FNO通道数
     */
    private Integer fnoHiddenChannels;
    /**
     * FNO输出通道数
     */
    private Integer fnoOutChannels;
    /**
     * FNO频率填充
     */
    private BigDecimal fnoDomainPadding;
    /**
     * 工况嵌入特征数
     */
    private Integer adainEmbedDim;
    /**
     * FNO层数
     */
    private Integer fnoNLayers;
    /**
     * FNO残差链接方式
     */
    private String fnoSkip;
    /**
     * 模型预测方式
     */
    private String  outStyle;
    /**
     * 最大输出点数
     */
    private Integer trainMaxOutPoints;
    /**
     * 训练下采样倍率
     */
    private Integer trainSubsample;
    /**
     * 权重衰减因子
     */
    private String weightDecay;
    /**
     * 权重保存间隔
     */
    private  Integer saveFreq;
    /**
     * 学习率衰减银子
     */
    private BigDecimal gamma;
    /**
     * 学习率衰减间隔
     */
    private Integer decaySteps;
    /**
     * 最大输出点数
     */
    private Integer evalMaxOutPoints;
    /**
     * 测试下采样倍率
     */
    private Integer evalSubsample;
    /**
     * 是否训练中测试
     */
    private Integer evalDuringTraining;

    private Integer modelTimeEmbed;
    public ModelTrainRequest() {

    }
}
